import request from '@/utils/request'

// 查询函数映射配置列表
export function listFunctionMapping(query) {
  return request({
    url: '/data/function_mapping/list',
    method: 'post',
    data: query
  })
}

// 查询函数映射配置详细
export function getFunctionMapping(id) {
  return request({
    url: '/data/function_mapping/edit/' + id,
    method: 'get'
  })
}

// 新增函数映射配置 - 匹配后端 DataFunctionMappingController 的 addSave 方法
export function addFunctionMapping(data) {
  return request({
    url: '/data/function_mapping/add',
    method: 'post',
    params: data  // 使用params而不是data，因为后端方法不是使用@RequestBody注解
  })
}

// 修改函数映射配置
export function updateFunctionMapping(data) {
  return request({
    url: '/data/function_mapping/edit',
    method: 'post',
    params: data  // 使用params而不是data
  })
}

// 删除函数映射配置
export function delFunctionMapping(id) {
  return request({
    url: '/data/function_mapping/remove',
    method: 'post',
    params: { ids: id }
  })
}

// 批量删除函数映射配置
export function removeFunctionMapping(ids) {
  return request({
    url: '/data/function_mapping/remove',
    method: 'post',
    params: { ids: ids }
  })
}

// 根据需求ID获取映射列表
export function getFunctionMappingBySdid(sdid) {
  return request({
    url: '/data/function_mapping/bySdid/' + sdid,
    method: 'post'
  })
}

// 根据指标ID获取映射列表
export function getFunctionMappingBySiid(siid) {
  return request({
    url: '/data/function_mapping/bySiid/' + siid,
    method: 'post'
  })
}

// 根据需求ID和指标ID获取映射
export function getFunctionMappingBySdidAndSiid(sdid, siid) {
  return request({
    url: '/data/function_mapping/by_demand_indicator',
    method: 'get',
    params: { sdid, siid }
  })
}

// 计算公式结果
export function calculateFormula(id, variables) {
  return request({
    url: '/data/function_mapping/calculate/' + id,
    method: 'post',
    data: variables  // 这个使用@RequestBody，所以用data
  })
}

// 测试公式
export function testFormula(formula, variables) {
  return request({
    url: '/data/function_mapping/testFormula',
    method: 'post',
    data: {  // 这个使用@RequestBody，所以用data
      formula: formula,
      variables: variables
    }
  })
}

// 检查需求和指标组合是否已存在映射 - 这个API需要后端添加
export function checkMappingExists(sdid, siid) {
  return request({
    url: '/data/function_mapping/checkExists',
    method: 'post',
    params: {
      sdid: sdid,
      siid: siid
    }
  })
}

// 根据结构ID获取映射列表
export function getFunctionMappingBySid(sid) {
  return request({
    url: '/data/function_mapping/bySid/' + sid,
    method: 'post'
  })
}

// 检查数字类型需求是否已被函数映射
export function checkDemandMapped(sdid) {
  return request({
    url: '/data/function_mapping/checkDemandMapped/' + sdid,
    method: 'post'
  })
}

// 检查数字类型技术指标是否已被函数映射
export function checkIndicatorMapped(siid) {
  return request({
    url: '/data/function_mapping/checkIndicatorMapped/' + siid,
    method: 'post'
  })
}

// 根据结构ID查询所有已映射的数字类型需求和技术指标
export function getNumTypeMappingsBySid(sid) {
  return request({
    url: '/data/function_mapping/numTypeMappings/' + sid,
    method: 'post'
  })
}

// 批量新增函数映射配置
export function batchAddFunctionMapping(dataList) {
  return request({
    url: '/data/function_mapping/batchAdd',
    method: 'post',
    data: dataList  // 这里使用data而不是params，因为我们发送的是JSON数组
  })
}

// 根据结构ID获取函数映射结果（包含需求和技术指标详细信息）
export function getFunctionMappingResultBySid(sid) {
  return request({
    url: '/data/function_mapping/resultBySid/' + sid,
    method: 'post'
  })
}

// 根据ID获取函数映射详细结果
export function getFunctionMappingResultById(id) {
  return request({
    url: '/data/function_mapping/mappingResult/' + id,
    method: 'post'
  })
}

// 检查某个需求和技术指标的组合是否已经存在函数映射
export function checkFunctionMappingExists(sid, sdid, siid) {
  return request({
    url: '/data/function_mapping/checkMappingExists',
    method: 'post',
    params: {
      sid: sid,
      sdid: sdid,
      siid: siid
    }
  })
}

// 根据技术指标ID删除所有函数映射
export function delFunctionMappingBySiid(siid) {
  return request({
    url: '/data/function_mapping/removeBySiid/' + siid,
    method: 'post'
  })
}

// 根据多个技术指标ID批量删除函数映射
export function delFunctionMappingBySiids(siids) {
  return request({
    url: '/data/function_mapping/removeBySiids',
    method: 'post',
    params: { siids: siids }
  })
}